//package com.robot.orders.service;
//
//import com.robot.orders.dao.SubOrdersDao;
//import com.robot.orders.pojo.SubOrders;
//import com.robot.orders.pojo.vo.OrdersRequestModel;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.domain.Page;
//import org.springframework.data.domain.PageRequest;
//import org.springframework.data.domain.Pageable;
//import org.springframework.data.jpa.domain.Specification;
//import org.springframework.stereotype.Service;
//import util.BinaryUtil;
//import util.IdWorker;
//
//import javax.persistence.criteria.Predicate;
//import java.time.LocalDateTime;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.List;
//import java.util.Map;
//
///**
// * subOrders服务层
// *
// * @author wuyunbin
// */
//@Service
//public class SubOrdersService {
//    @Autowired
//    private SubOrdersDao subOrdersDao;
//
//    private final Logger logger = LoggerFactory.getLogger(this.getClass());
//
//    @Autowired
//    private IdWorker idWorker;
//
//    /**
//     * 增加SubOrders
//     *
//     * @param subOrders
//     */
//    public void addSubOrders(SubOrders subOrders) {
//
//
//        subOrdersDao.save(subOrders);
//    }
//
//    /**
//     * 增加订单
//     *
//     * @param ordersRequestModel
//     */
//    public void add(OrdersRequestModel ordersRequestModel) {
//        //这里只给关键信息，足够支付就可以。
//        // 然后给队列加ordersId其他信息交给队列进行补全
//
//        LocalDateTime now = LocalDateTime.now();
//        SubOrders subOrders = new SubOrders();
//        subOrders.setAgentId("");
//        subOrders.setOpenId(ordersRequestModel.getOpenId());
//        subOrders.setStoreId(ordersRequestModel.getStoreId());
//        subOrders.setId(BinaryUtil.decimal2Base62(idWorker.nextId()));
//        subOrders.setOrdersId(ordersRequestModel.getOrdersId());
//        subOrders.setPrice(ordersRequestModel.getPrice());
//        subOrders.setPayment(ordersRequestModel.getPayment());
//        subOrders.setPayAmount(ordersRequestModel.getPayAmount());
//        subOrders.setRate(ordersRequestModel.getRate());
//        subOrders.setMemberId(ordersRequestModel.getMemberId());
//        subOrders.setEvaluating("0");
//        subOrders.setStatus("0");
//        String remark = ordersRequestModel.getRemark();
//        subOrders.setRemark(remark);
//        subOrders.setCreatedAt(now);
//        subOrders.setUpdatedAt(now);
//        logger.info("orders id=" + subOrders.getId());
//        subOrdersDao.save(subOrders);
//
//    }
//
//
//    /**
//     * 修改SubOrders
//     *
//     * @param subOrders
//     */
//    public void updateSubOrders(SubOrders subOrders) {
//        subOrdersDao.save(subOrders);
//    }
//
//
//    /**
//     * 条件查询+分页
//     *
//     * @param whereMap
//     * @param page
//     * @param size
//     * @return
//     */
//    public Page<SubOrders> findSearch(Map whereMap, int page, int size) {
//        Specification<SubOrders> specification = createSpecification(whereMap);
//        PageRequest pageRequest = PageRequest.of(page - 1, size);
//        return subOrdersDao.findAll(specification, pageRequest);
//    }
//
//    /**
//     * 根据ID查询实体
//     *
//     * @param id
//     * @return
//     */
//    public SubOrders findById(String id) {
//        return subOrdersDao.findById(id).orElse(null);
//    }
//
//    /**
//     * 动态条件构建
//     *
//     * @param searchMap
//     * @return
//     */
//    private Specification<SubOrders> createSpecification(Map searchMap) {
//        return (Specification<SubOrders>) (root, query, cb) -> {
//            List<Predicate> predicateList = new ArrayList<>();
//            // 订单id
//            String id = "id";
//            if (searchMap.get(id) != null && !"".equals(searchMap.get(id))) {
//                predicateList.add(cb.like(root.get(id).as(String.class), "%" + (String) searchMap.get(id) + "%"));
//            }
//            // 总单号
//            String ordersId = "ordersId";
//            if (searchMap.get(ordersId) != null && !"".equals(searchMap.get(ordersId))) {
//                predicateList.add(cb.like(root.get(ordersId).as(String.class), "%" + (String) searchMap.get(ordersId) + "%"));
//            }
//            // 支付方式 10-微信扫码,20-支付宝扫码,30-银联,40-其他
//            String payment = "payment";
//            if (searchMap.get(payment) != null && !"".equals(searchMap.get(payment))) {
//                predicateList.add(cb.like(root.get(payment).as(String.class), "%" + (String) searchMap.get(payment) + "%"));
//            }
//            // 代理商id
//            String agentId = "agentId";
//            if (searchMap.get(agentId) != null && !"".equals(searchMap.get(agentId))) {
//                predicateList.add(cb.like(root.get(agentId).as(String.class), "%" + (String) searchMap.get(agentId) + "%"));
//            }
//            // 商家id
//            String companyId = "companyId";
//            if (searchMap.get(companyId) != null && !"".equals(searchMap.get(companyId))) {
//                predicateList.add(cb.like(root.get(companyId).as(String.class), "%" + (String) searchMap.get(companyId) + "%"));
//            }
//            // 店铺id
//            String storeId = "storeId";
//            if (searchMap.get(storeId) != null && !"".equals(searchMap.get(storeId))) {
//                predicateList.add(cb.like(root.get(storeId).as(String.class), "%" + (String) searchMap.get(storeId) + "%"));
//            }
//            // 店铺名字
//            String storeName = "storeName";
//            if (searchMap.get(storeName) != null && !"".equals(searchMap.get(storeName))) {
//                predicateList.add(cb.like(root.get(storeName).as(String.class), "%" + (String) searchMap.get(storeName) + "%"));
//            }
//            // 商家/店铺所在区县
//            String area = "area";
//            if (searchMap.get(area) != null && !"".equals(searchMap.get(area))) {
//                predicateList.add(cb.like(root.get(area).as(String.class), "%" + (String) searchMap.get(area) + "%"));
//            }
//            // 会员id
//            String memberId = "memberId";
//            if (searchMap.get(memberId) != null && !"".equals(searchMap.get(memberId))) {
//                predicateList.add(cb.like(root.get(memberId).as(String.class), "%" + (String) searchMap.get(memberId) + "%"));
//            }
//            // 会员昵称
//            String nickname = "nickname";
//            if (searchMap.get(nickname) != null && !"".equals(searchMap.get(nickname))) {
//                predicateList.add(cb.like(root.get(nickname).as(String.class), "%" + (String) searchMap.get(nickname) + "%"));
//            }
//            // 会员手机号
//            String phone = "phone";
//            if (searchMap.get(phone) != null && !"".equals(searchMap.get(phone))) {
//                predicateList.add(cb.like(root.get(phone).as(String.class), "%" + (String) searchMap.get(phone) + "%"));
//            }
//            // 会员等级
//            String memberGrade = "memberGrade";
//            if (searchMap.get(memberGrade) != null && !"".equals(searchMap.get(memberGrade))) {
//                predicateList.add(cb.like(root.get(memberGrade).as(String.class), "%" + (String) searchMap.get(memberGrade) + "%"));
//            }
//            // 状态 0-未支付 1-已支付 2-关闭订单
//            String status = "status";
//            if (searchMap.get(status) != null && !"".equals(searchMap.get(status))) {
//                predicateList.add(cb.like(root.get(status).as(String.class), "%" + (String) searchMap.get(status) + "%"));
//            }
//            // 状态 0-未评价 1-已评价
//            String evaluating = "evaluating";
//            if (searchMap.get(evaluating) != null && !"".equals(searchMap.get(evaluating))) {
//                predicateList.add(cb.like(root.get(evaluating).as(String.class), "%" + (String) searchMap.get(evaluating) + "%"));
//            }
//            // 是否使用了优惠券 0-未使用 1-已使用
//            String hasCoupon = "hasCoupon";
//            if (searchMap.get(hasCoupon) != null && !"".equals(searchMap.get(hasCoupon))) {
//                predicateList.add(cb.like(root.get(hasCoupon).as(String.class), "%" + (String) searchMap.get(hasCoupon) + "%"));
//            }
//            // 优惠券id
//            String couponId = "couponId";
//            if (searchMap.get(couponId) != null && !"".equals(searchMap.get(couponId))) {
//                predicateList.add(cb.like(root.get(couponId).as(String.class), "%" + (String) searchMap.get(couponId) + "%"));
//            }
//            // 地址id
//            String addressId = "addressId";
//            if (searchMap.get(addressId) != null && !"".equals(searchMap.get(addressId))) {
//                predicateList.add(cb.like(root.get(addressId).as(String.class), "%" + (String) searchMap.get(addressId) + "%"));
//            }
//            //备注,是否plus会员 0-游客/注册用户,1-付了一块钱->会员,2-付了198->plus会员
//            String remark = "remark";
//            if (searchMap.get(remark) != null && !"".equals(searchMap.get(remark))) {
//                predicateList.add(cb.like(root.get(remark).as(String.class), "%" + (String) searchMap.get(remark) + "%"));
//            }
//            //剔除软删除数据
//            String deletedAt = "deletedAt";
//            predicateList.add(cb.equal(root.get(deletedAt), cb.nullLiteral(Date.class)));
//
//            return cb.and(predicateList.toArray(new Predicate[predicateList.size()]));
//        };
//    }
//
//
//    /**
//     * 根据memberId查找SubOrders
//     *
//     * @param memberId
//     * @param page
//     * @param size
//     * @return
//     */
//    public Page<SubOrders> findAllByMemberIdAndDeletedAtIsNullOrderByCreatedAtDesc(String memberId, int page, int size) {
//        Pageable pageable = PageRequest.of(page - 1, size);
//        return subOrdersDao.findAllByMemberIdAndDeletedAtIsNullOrderByCreatedAtDesc(memberId, pageable);
//    }
//
//    /**
//     * 根据memberID和evaluating查找SubOrders
//     *
//     * @param memberId
//     * @param evaluating
//     * @param page
//     * @param size
//     * @return
//     */
//    public Page<SubOrders> findAllByMemberIdAndEvaluatingAndDeletedAtIsNullOrderByCreatedAtDesc(String memberId, String evaluating, int page, int size) {
//        Pageable pageable = PageRequest.of(page - 1, size);
//        return subOrdersDao.findAllByMemberIdAndEvaluatingAndDeletedAtIsNullOrderByCreatedAtDesc(memberId, evaluating, pageable);
//    }
//
//    /**
//     * 根据memberID和status查找SubOrders
//     *
//     * @param memberId
//     * @param status
//     * @param page
//     * @param size
//     * @return
//     */
//    public Page<SubOrders> findAllByMemberIdAndStatusAndDeletedAtIsNullOrderByCreatedAtDesc(String memberId, String status, int page, int size) {
//        Pageable pageable = PageRequest.of(page - 1, size);
//        return subOrdersDao.findAllByMemberIdAndStatusAndDeletedAtIsNullOrderByCreatedAtDesc(memberId, status, pageable);
//    }
//
//    /**
//     * 根据memberId和id查询SubOrders
//     *
//     * @param id
//     * @param memberId
//     * @return
//     */
//    public SubOrders findByIdAndMemberId(String id, String memberId) {
//        return subOrdersDao.findByIdAndMemberId(id, memberId);
//    }
//
//    /**
//     * 根据memberId和ordersId查询SubOrders
//     *
//     * @param ordersId
//     * @param memberId
//     * @return
//     */
//    public List<SubOrders> findAllByOrdersIdAndMemberId(String ordersId, String memberId) {
//        return subOrdersDao.findAllByOrdersIdAndMemberId(ordersId, memberId);
//    }
//
//    /**
//     * 根据memberId查找会员累计支付成功的订单数
//     *
//     * @param memberId
//     * @return
//     */
//    public String findCountByMemberId(String memberId) {
//        return subOrdersDao.findCountByMemberId(memberId);
//    }
//
//    /**
//     * 根据memberId查找会员累计消费金额
//     *
//     * @param memberId
//     * @return
//     */
//    public String findPayAmountByMemberId(String memberId) {
//        return subOrdersDao.findPayAmountByMemberId(memberId);
//    }
//
//    /**
//     * 根据memberId和storeId查找会员累计消费金额
//     *
//     * @param memberId
//     * @param storeId
//     * @return
//     */
//    public String findPayAmountByMemberIdAndStoreId(String memberId, String storeId) {
//        return subOrdersDao.findPayAmountByMemberIdAndStoreId(memberId, storeId);
//    }
//
//    /**
//     * 根据memberID查找会员累计节省金额
//     *
//     * @param memberId
//     * @return
//     */
//    public String findDiscountAmountByMemberId(String memberId) {
//        return subOrdersDao.findDiscountAmountByMemberId(memberId);
//    }
//
//
//    /**
//     * 根据storeId查找SubOrders
//     *
//     * @param storeId
//     * @param page
//     * @param size
//     * @return
//     */
//    public Page<SubOrders> findAllByStoreIdAndDeletedAtIsNullOrderByCreatedAtDesc(String storeId, int page, int size) {
//        Pageable pageable = PageRequest.of(page - 1, size);
//        return subOrdersDao.findAllByStoreIdAndDeletedAtIsNullOrderByCreatedAtDesc(storeId, pageable);
//    }
//
//    /**
//     * 根据storeId,memberId和status查找SubOrders
//     *
//     * @param memberId
//     * @param storeId
//     * @param status
//     * @param page
//     * @param size
//     * @return
//     */
//    public Page<SubOrders> findAllByMemberIdAndStoreIdAndStatusAndDeletedAtIsNullOrderByCreatedAtDesc(String memberId, String storeId, String status, int page, int size) {
//        Pageable pageable = PageRequest.of(page - 1, size);
//        return subOrdersDao.findAllByMemberIdAndStoreIdAndStatusAndDeletedAtIsNullOrderByCreatedAtDesc(memberId, storeId, status, pageable);
//    }
//
//    /**
//     * 根据storeId查找本月累计支付成功的订单数
//     *
//     * @param storeId
//     * @return
//     */
//    public String findThisMonthCountByStoreId(String storeId) {
//        return subOrdersDao.findThisMonthCountByStoreId(storeId);
//    }
//
//    /**
//     * 根据storeId查找累计消费金额
//     *
//     * @param storeId
//     * @return
//     */
//    public String findPayAmountByStoreId(String storeId) {
//        return subOrdersDao.findPayAmountByStoreId(storeId);
//    }
//
//    /**
//     * 根据storeId查找今天订单
//     *
//     * @param storeId
//     * @param page
//     * @param size
//     * @return
//     */
//    public Page<SubOrders> findAllByStoreIdAndToday(String storeId, int page, int size) {
//        Pageable pageable = PageRequest.of(page - 1, size);
//        return subOrdersDao.findAllByStoreIdAndToday(storeId, pageable);
//    }
//
//    /**
//     * 根据storeId查找昨天订单
//     *
//     * @param storeId
//     * @param page
//     * @param size
//     * @return
//     */
//    public Page<SubOrders> findAllByStoreIdAndYesterday(String storeId, int page, int size) {
//        Pageable pageable = PageRequest.of(page - 1, size);
//        return subOrdersDao.findAllByStoreIdAndYesterday(storeId, pageable);
//    }
//
//    /**
//     * 根据storeId查找最近7日订单
//     *
//     * @param storeId
//     * @param page
//     * @param size
//     * @return
//     */
//    public Page<SubOrders> findAllByStoreIdAndWeek(String storeId, int page, int size) {
//        Pageable pageable = PageRequest.of(page - 1, size);
//        return subOrdersDao.findAllByStoreIdAndWeek(storeId, pageable);
//    }
//
//    /**
//     * 根据storeId查找总订单
//     *
//     * @param storeId
//     * @param page
//     * @param size
//     * @return
//     */
//    public Page<SubOrders> findAllByStoreIdAndTotal(String storeId, int page, int size) {
//        Pageable pageable = PageRequest.of(page - 1, size);
//        return subOrdersDao.findAllByStoreIdAndTotal(storeId, pageable);
//    }
//
//
//    /**
//     * 根据agentId查找今天订单
//     *
//     * @param agentId
//     * @param page
//     * @param size
//     * @return
//     */
//    public Page<SubOrders> findAllByAgentIdAndToday(String agentId, int page, int size) {
//        Pageable pageable = PageRequest.of(page - 1, size);
//        return subOrdersDao.findAllByAgentIdAndToday(agentId, pageable);
//    }
//
//    /**
//     * 根据agentId查找昨天订单
//     *
//     * @param agentId
//     * @param page
//     * @param size
//     * @return
//     */
//    public Page<SubOrders> findAllByAgentIdAndYesterday(String agentId, int page, int size) {
//        Pageable pageable = PageRequest.of(page - 1, size);
//        return subOrdersDao.findAllByAgentIdAndYesterday(agentId, pageable);
//    }
//
//    /**
//     * 根据agentId查找最近7日订单
//     *
//     * @param agentId
//     * @param page
//     * @param size
//     * @return
//     */
//    public Page<SubOrders> findAllByAgentIdAndWeek(String agentId, int page, int size) {
//        Pageable pageable = PageRequest.of(page - 1, size);
//        return subOrdersDao.findAllByAgentIdAndWeek(agentId, pageable);
//    }
//
//    /**
//     * 根据agentId查找总订单
//     *
//     * @param agentId
//     * @param page
//     * @param size
//     * @return
//     */
//    public Page<SubOrders> findAllByAgentIdAndTotal(String agentId, int page, int size) {
//        Pageable pageable = PageRequest.of(page - 1, size);
//        return subOrdersDao.findAllByAgentIdAndTotal(agentId, pageable);
//    }
//
//    /**
//     * 根据agentId和createdAt查找总订单
//     *
//     * @param agentId
//     * @param createdAt
//     * @return
//     */
//    public List<SubOrders> findAllByAgentIdAndCreatedAt(String agentId, String createdAt, int page, int size) {
//        Pageable pageable = PageRequest.of(page - 1, size);
//        return subOrdersDao.findAllByAgentIdAndCreatedAt(agentId, createdAt);
//    }
//
//    public List<SubOrders> findAllByOrdersId(String ordersId) {
//        return subOrdersDao.findByOrdersId(ordersId);
//    }
//
//    public void updateByRequestModel(OrdersRequestModel ordersRequestModel) {
//
//        SubOrders subOrders = findById(ordersRequestModel.getOrdersId());
//        if(subOrders!=null){
//            subOrders.setPayment(ordersRequestModel.getPayment());
//            subOrders.setPrice(ordersRequestModel.getPrice());
//            subOrders.setPayAmount(ordersRequestModel.getPayAmount());
//            subOrders.setRate(ordersRequestModel.getRate());
//            subOrders.setEvaluating("0");
//            subOrders.setStatus("0");
//            subOrdersDao.save(subOrders);
//        }
//    }
//}
